題目1
1 | @property (nonatomic,getter=issFf) float ff; |
self.ff
= ? 103[self valueForKey:@"ff"]
= ? 100
『提示』:
這題的觀念在於理解property 的 accessor 和 KVC 的 accessor 並非相同一個
因為 KVC 的 accessor 本身已經有既定的搜尋對象
KVC 的 accessor 搜尋過程請參考 : KVC 簡報 的 accessor lookup
題目2
現在有個純字串的array
內容是@[@"a",@"b",@"c"]
,如何拿到全部大寫的array?[@[@”a”,@”b”,@”c”] valueForKey:@”uppercaseString”]
現在有個dict
內容是@{@"a":@"aa",@"b":@"bb"}
,如何拿到key值為b的內容?並且轉成大寫?
[@{@”a”:@”aa”,@”b”:@”bb”} valueForKey:@”b”]
[@{@”a”:@”aa”,@”b”:@”bb”} valueForKeyPath:@”b.uppercaseString”]
『提示』:
此題觀念在於 collection 物件對 KVC 有著不一樣的詮釋方式
對 array 做 KVC 其實是對 array 裏面的所有元素做一次 KVC 的動作
對 dictionary 做 KVC 一樣也是作用到裏面的元素,但是還可以進一步去取用某個key
可以參考簡報 KVC Collection
題目3
現在有個array
內容是@[@1,@2,@3]
- 如何獲得array內的個數 [@[@1,@2,@3] valueForKey:@”@count”]
- 如何獲得最大 最小 平均 [@[@1,@2,@3] valueForKey:@”@max.self”]
『提示』:
因為對 array 做 KVC 其實是對 array 裏面的所有元素做一次 KVC 的動作
如果我們想對 array 做 KVC 的話,在key的前面必須加上@
例如:[array count] -> [array valueForKey:@”@count”]
3-2 必須搭配final題才會解釋比較清楚
題目4
KVC能做到什麼事情?
PS:跟KVC
的運作流程有相關
- 進階用途
KVO
- 存取property
- 存取property的property
valueForKeyPath:
- … and more
『提示』:
就在上面兩行!!
kvc題目final!!(封印中…)
NSArray *array1 = @[@"1",@"2",@"3"];
NSArray *array2 = @[@1,@2,@3];
Q1.對array1皆append "abc"
Q2.對array2 皆乘上10
Q3.對array1皆append 任意字串
Q4.對array2 皆乘上任意數字
『提示』:
4-1 以及 4-2 是相對簡單的題目
從題目2已經知道對 array 做 KVC 其實是對 array 裏面的所有元素做一次 KVC 的動作
所以只要幫NSString 和 NSNumber個別新增一個方法,就大功告成